package com.lingjtx.common.core.handle;

import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import java.util.function.Function;

public interface ObjectPool<T> {

    /**
     * 获取池中的一个对象（连接），如果没有可用的连接，则会等待或扩展池
     */
    T acquire();

    /**
     * 释放一个连接回池
     */
    void release(T obj);

    /**
     * 关闭连接池并销毁所有对象
     */
    void shutdown();

    void async(Runnable task);

    PooledObject<T> autoAcquire();

    <R> R execute(Function<T, R> action);

    void consume(Consumer<T> consumer);

    void asyncConsume(Consumer<T> consumer);

    <R> CompletableFuture<R> asyncExecute(Function<T, R> action);

    Map<String, Object> getResourceMonitorMap();
}
